Skip to main content

Firestore Scheduled Backups

This sample demonstrates using AppEngine cron jobs to run nightly backups of data in Firestore.

Setup

1 - Create a Project

If you haven't already, create a new Firebase project and create a Cloud Firestore database within the project.

2 - Configure IAM

This sample will use the AppEngine default service account to perform backups of your Firestore data. To do this, you will need to give the service account permission to access your data and save it to google cloud storage.

Make the service account a Datastore Import/Export Admin:

$ gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
--member serviceAccount:YOUR_PROJECT_ID@appspot.gserviceaccount.com --role roles/datastore.importExportAdmin

Give the service account permission to write to the GCS bucket you are going to use. Here, we will use the default bucket:

$ gsutil iam ch \
serviceAccount:YOUR_PROJECT_ID@appspot.gserviceaccount.com:objectCreator \
gs://YOUR_PROJECT_ID.appspot.com

3 - Configure Cron

Open cron.yaml and edit this line:

/cloud-firestore-export?outputUriPrefix=gs://BUCKET_NAME[/PATH]&collections=test1,test2

You should change gs://BUCKET_NAME[/PATH] to the Google Cloud Storage path where your data should be backed up. If you only want to back up certain collections, change test1,test2 to a comma-separated list of those collections. Otherwise, delete the &collections=test1,test2 param.

Deploy

To deploy the project, run:

$ gcloud app deploy app.yaml cron.yaml

To make sure it deployed correctly, navigate to https://YOUR_PROJECT_ID.appspot.com/

Test

To test the backup, navigate to the following URL: https://YOUR_PROJECT_ID.appspot.com/cloud-firestore-export?outputUriPrefix=gs://YOUR_PROJECT_ID.appspot.com

You should see some output like this, letting you know that a backup was started:

{
name: "projects/YOUR_PROJECT_ID/databases/(default)/operations/ASA2NDIwNjI3ODQJGnRsdWFmZWQHEmxhcnRuZWNzdS1zYm9qLW5pbWRhFAosEg",
metadata: {
@type: "type.googleapis.com/google.firestore.admin.v1beta1.ExportDocumentsMetadata",
startTime: "2018-10-11T22:47:15.473517Z",
operationState: "PROCESSING",
outputUriPrefix: "gs://YOUR_PROJECT_ID.appspot.com/2018-10-11-22-47-15"
}
}